/**
 * 
 * 服务器返回的金额都为分，显示时处理成元
 * @param cent 分
 */
export function formatPrice(cent) {
  cent = cent.toFixed(0);
  let num = (isNaN(cent)) ? String(0) : String(cent)
  let zero = ''
  for (let i = num.length; i < 3; i++) {
    zero += '0'
  }
  num = zero + num
  return `${num.slice(0, num.length - 2)}.${num.slice(num.length - 2)}`
}

/**
 * 返回按钮 
 * @param 有上一页则返回 没有回首页
 * @returns 
 */
export function navigateBack() {
	const pages = getCurrentPages()
	if(pages.length>1){
		uni.navigateBack()
	}else{
		uni.switchTab({
			url:'/pages/tabBar/home/index'
		})
	}
}

/**
 * 对数字添0格式化
 * @param num 原数据
 * @param n 完成后的长度，在其前面添0
 * @returns string
 */
export function joinZeroNum(num, n=2) {
    let len = num.toString().length
    while (len < n) {
        num = '0' + num
        len++
    }
    return num
}

/**
 * 对时间戳进行格式化为数组[年，月，日，时，分，秒，星期]
 * @param timestamp 时间戳
 * @returns array
 */
export function formatTimestamp(timestamp) {
    var date = new Date(timestamp);
	var y = date.getFullYear();
	var m = date.getMonth() + 1;
	m = m < 10 ? ('0' + m) : m;
	var d = date.getDate();
	d = d < 10 ? ('0' + d) : d;
	var h = date.getHours();
	h = h < 10 ? ('0' + h) : h;
	var minute = date.getMinutes();
	minute = minute < 10 ? ('0' + minute) : minute;
	var second = date.getSeconds();
	second = second < 10 ? ('0' + second) : second;
	var day = date.getDay();
	const arr = [y,m,d,h,minute,second,day]
    return arr
}

/**
 保留N位小数
 最终返回的是字符串
 若转换失败，返回参数原值
 @params
 str - 数字或字符串
 x   - 保留几位小数点
 */
export function pointX(str, x = 0) {
  if (!str && str !== 0) {
    return str
  }
  const temp = Number(str)
  if (temp === 0) {
    return temp.toFixed(x)
  }
  return temp ? temp.toFixed(x) : str
}

/**
   去掉字符串两端空格
   */
export function trim(str) {
  const reg = /^\s*|\s*$/g
  return str.replace(reg, '')
}

/**
  给字符串打马赛克
  如：将123456转换为1****6，最多将字符串中间6个字符变成*
  如果字符串长度小于等于2，将不会有效果
  */
export function addMosaic(str) {
  const s = String(str)
  const lenth = s.length
  const howmuch = (() => {
    if (s.length <= 2) {
      return s.length
    }
    const l = s.length - 2
    if (l <= 6) {
      return l
    }
    return 6
  })()
  const start = Math.floor((lenth - howmuch) / 2)
  const ret = s.split('').map((v, i) => {
    if (i >= start && i < start + howmuch) {
      return '*'
    }
    return v
  })
  return ret.join('')
}

/**
 * 清除一个对象中那些属性为空值的属性
 * 0 算有效值
 * **/
export function clearNull(obj) {
  const temp = {}
  Object.keys(obj).forEach((item) => {
    if (obj[item] === 0 || !!obj[item]) {
      temp[item] = obj[item]
    }
  })
  return temp
}

/*
* 判断参数是否为空
* */
export function isEmpty(obj) {
  // 检验null和undefined
  if (!obj && obj !== 0 && obj !== '') {
    return true
  }
  // 检验数组
  if (Array.prototype.isPrototypeOf(obj) && obj.length === 0) {
    return true
  }
  // 检验对象
  if (Object.prototype.isPrototypeOf(obj) && Object.keys(obj).length === 0) {
    return true
  }
  return false
}

/*
* 1.清除一个对象中那些属性为空值的属性
*   0 算有效值
* 2.清楚一个对象中的字符串前后空格
* */
export function clearAll(obj) {
  let temp = {}
  let clearNull = this.clearNull(obj)
  Object.keys(clearNull).forEach((item) => {
    if (typeof obj[item] === 'string') {
      temp[item] = this.trim(obj[item])
    } else {
      temp[item] = obj[item]
    }
  })
  return temp
}

/**
 * 函数防抖，在事件被触发n秒后再执行回调，如果在这n秒内又被触发，则重新计时。用于防止表单多次提交。
 * @param fn 要执行的函数
 * @param wait 等待时间
 */
export function debounce(fn, wait = 300) {
  let timer = null
  return function () {
    let context = this
    let args = arguments
    if (timer) {
      clearTimeout(timer)
      timer = null
    }
    timer = setTimeout(function () {
      fn.apply(context, args)
    }, wait)
  }
}

/**
 * 函数节流,规定一个单位时间，在这个单位时间内，只能有一次触发事件的回调函数执行，如果在同一个单位时间内某事件被触发多次，只有一次能生效。
 * 用于游戏中的刷新率等
 * @param fn 要执行的函数
 * @param gapTime 单位
 */
export function throttle(fn, gapTime = 300) {
  let _lastTime = null
  return function () {
    let _nowTime = +new Date()
    if (_nowTime - _lastTime > gapTime || !_lastTime) {
      fn.apply(this, arguments)
      _lastTime = _nowTime
    }
  }
}


/**
 * 是否偶数 isEven(2) // true
 */
export function isEven(num) {
  return (num % 2 == 0)
}
